package com.tea.app.moudles.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.tea.app.moudles.entity.GoodsCollection;
import com.tea.app.moudles.mapper.GoodsCollectionMapper;
import com.tea.app.moudles.service.GoodsCollectionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 商品收藏服务实现类
 */
@Service
public class GoodsCollectionServiceImpl implements GoodsCollectionService {
    
    @Autowired
    private GoodsCollectionMapper collectionMapper;

    /**
     * 添加用户收藏记录
     * @param wxOpenid 用户的唯一标识
     * @param goodsId 商品id
     */
    @Override
    public void addCollection(String wxOpenid, Long goodsId) {
        // 检查是否已收藏
        QueryWrapper<GoodsCollection> wrapper = new QueryWrapper<>();
        wrapper.eq("wx_openid", wxOpenid).eq("goods_id", goodsId);
        // 如果已收藏，直接返回 如果没收藏则新增收藏记录
        if(collectionMapper.selectCount(wrapper) == 0) {
            GoodsCollection collection = new GoodsCollection();
            collection.setWxOpenid(wxOpenid);
            collection.setGoodsId(goodsId);
            collection.setCreateTime(new Date());
            collectionMapper.insert(collection);
        }
    }

    /**
     * 移除收藏记录
     * @param wxOpenid 用户的唯一标识
     * @param goodsId 商品id
     */
    @Override
    public void removeCollection(String wxOpenid, Long goodsId) {
        //构建删除条件
        QueryWrapper<GoodsCollection> wrapper = new QueryWrapper<>();
        wrapper.eq("wx_openid", wxOpenid).eq("goods_id", goodsId);
        //执行删除操作
        collectionMapper.delete(wrapper);
    }

    /**
     * 获取用户收藏的商品id列表
     * @param wxOpenid 用户的唯一标识
     * @return 用户收藏的商品id列表
     */
    @Override
    public List<Long> getUserCollectionGoodsIds(String wxOpenid) {
        //构建查询条件
        QueryWrapper<GoodsCollection> wrapper = new QueryWrapper<>();
        wrapper.eq("wx_openid", wxOpenid);
        //执行查询操作并拿出商品id并返回
        return collectionMapper.selectList(wrapper)
                .stream()
                .map(GoodsCollection::getGoodsId)
                .collect(Collectors.toList());
    }

    /**
     * 获取用户的收藏记录
     * @param wxOpenid 用户的唯一标识
     * @return 用户的收藏记录列表
     */
    @Override
    public List<GoodsCollection> getUserCollections(String wxOpenid) {
        //构建查询条件
        QueryWrapper<GoodsCollection> wrapper = new QueryWrapper<>();
        //查询用户的收藏记录
        wrapper.eq("wx_openid", wxOpenid);
        //调用mapper查询数据库
        return collectionMapper.selectList(wrapper);
    }
}